#ifndef DISTINFO_H
#define DISTINFO_H

#include <QWidget>
#include <QTimer>

class DistInfo : public QWidget
{
    Q_OBJECT

public:
    DistInfo(QWidget *parent = 0);
    /* ------------------------------------------------- 尺寸设置 ------------------------------------------------- */
    void setLightBeltHeightProportion(quint8 value);                                                // 设置距离信息光带的高度占整个控件高度的百分比
    void setLightBeltWidthProportion(quint8 value);                                                 // 设置距离信息光带的宽度占整个控件宽度的百分比
    void setDistValueHeightProportion(quint8 value);                                                // 设置距离显示的数字中心高度占整个控件高度的百分比
    void setScaleLineToCenterLengthProportion(quint8 value);                                        // 设置刻度线中心与控件中心线的距离占整个控件宽度的百分比
    void setScaleLineWidth(quint8 value);                                                           // 设置刻度线条宽度
    void setHorizontalSpaceWidth(quint8 value);                                                     // 设置横向对象间距
    void setVerticalSpaceHeight(quint8 value);                                                      // 设置竖向对象间距
    void setDistDigitalValueHeightProportion(quint8 value);                                         // 设置数字显示值的中心距离底边高度占控件高度百分比
    void setTargetSpeedHeightProportion(quint8 value);                                              // 设置目标速度中心距离顶边的高度占控件高度百分比


    /* ------------------------------------------------- 颜色设置 ------------------------------------------------- */
    void setLightBeltColor(QColor color);                                                           // 设置距离信息光带颜色
    void setScaleLineColor(QColor color);                                                           // 设置刻度线颜色



    /* ------------------------------------------------- 其他属性设置 ------------------------------------------------- */
    void setMaxScaleValue(quint16 value);                                                           // 设置距离信息显示的最大值
    void setCurrentDistValue(quint16 value);                                                        // 设置当前距离值
    void setTargetSpeed(quint16 value);                                                             // 设置目标速度
    void setInterval(quint16 interval);                                                             // 设置刷新频率
    void setScaleVector(QVector<quint16> vector);                                                   // 设置刻度值数组
    void changeScaleVector(quint8 pos, quint16 value);                                              // 修改刻度值数组
    void setScaleUinit(QString str);                                                                // 设置刻度显示单位
    void setCurrentValueUinit(QString str);                                                         // 设置当前距离值显示单位
    void setDistDigitalFontSize(quint8 value);                                                      // 设置数字显示值的字体大小
    void setDistDigitalFontFace(QString name);                                                      // 设置数字显示值的字体类型
    void setTargetSpeedFontSize(quint8 value);                                                      // 设置目标速度的字体大小
    void setTargetSpeedFontFace(QString name);                                                      // 设置目标速度的字体类型
    void setTargetSpeedFontBold(bool bold);                                                         // 设置目标速度字体加粗

public slots:
    void refresh();


private:
    void initParam();                                                                               // 参数初始化

protected:
    void paintEvent(QPaintEvent* event);
    void resizeEvent(QResizeEvent *event);
    void drawDistInfo(QPainter* pPainter);                                                          // 绘制距离信息控件
    void drawLightBelt(QPainter* pPainter);                                                         // 绘制距离信息光带
    void drawScaleLine(QPainter *pPainter);                                                         // 绘制刻度线
    void drawScaleDigital(QPainter *pPainter);                                                      // 绘制刻度数字
    void drawCurrentValue(QPainter *pPainter);                                                      // 绘制当前值
    void drawTargetSpeed(QPainter *pPainter);                                                       // 绘制当前速度

private:
    // 尺寸属性
    QPoint mCenterPoint;                                                                            // 控件的中心点
    quint8 mLightBeltHeightProportion = 80;                                                         // 距离信息光带的高度占整个控件高度的百分比
    quint16 mLightBeltHeight;                                                                       // 距离信息光带高度
    quint8 mLightBeltWidthProportion = 12;                                                          // 距离信息光带的宽度占整个控件宽度的百分比
    quint16 mLightBeltWidth;                                                                        // 距离信息光带宽度
    quint16 mLightBeltBottomHeight;                                                                 // 距离信息光带底边距离控件底边高度
    quint8 mDistValueHeightProportion = 10;                                                         // 距离显示数值中心点距离控件底边高度占整个控件高度的百分比
    quint16 mDistValueHeight;                                                                       // 距离显示数值中心点距离控件底边高度
    quint8 mScaleLineToCenterLengthProportion = 5;                                                  // 刻度线中心与控件中心线的距离占整个控件宽度的百分比
    quint16 mScaleLineToCenterLength;                                                               // 刻度线中心与控件中心线的距离
    quint16 mScaleLineLength;                                                                       // 刻度线长度
    quint8 mScaleLineWidth = 2;                                                                     // 刻度线条宽度
    quint8 mHorizontalSpaceWidth = 3;                                                               // 各类型对象横向间距
    quint8 mVerticalSpaceHeight = 3;                                                                // 各类型对象竖向间距
    quint8 mDistDigitalValueHeightProportion = 10;                                                  // 数字显示值的中心距离底边高度占控件高度百分比
    quint16 mDistDigitalValueHeight;                                                                // 数字显示值的中心距离底边高度

    quint8 mTargetSpeedHeightProportion = 5;                                                        // 目标速度中心距离顶边的高度占控件高度百分比
    quint16 mTargetSpeedHeight;                                                                     // 目标速度中心距离顶边的高度


    // 颜色属性
    QColor mLightBeltColor = QColor(45, 144, 51);                                                   // 距离信息光带颜色
    QColor mScaleLineColor = QColor(212, 212, 212);                                                 // 刻度线颜色
    QColor mDistDigitalColor = QColor(212, 212, 212);                                               // 距离数值颜色
    QColor mTargetSpeedColor = QColor(212, 212, 212);                                               // 目标速度颜色

    // 其他属性
    quint16 mMaxScaleValue = 750;                                                                   // 距离信息光带的最大显示值
    quint16 mCurrentDistValue = 0;                                                                  // 当前的距离值
    quint16 mTargetSpeed = 0;                                                                       // 目标速度
    QTimer mTimer;                                                                                  // 刷新定时器
    QVector<quint16> mScaleVector;                                                                  // 刻度值数组
    QString mScaleUinit = "m";                                                                      // 刻度显示单位
    QString mCurrentValueUinit = "米";                                                               // 当前距离值显示单位
    quint8 mDistDigitalFontSize = 10;                                                               // 距离数字(包括刻度和当前值)的字体大小（单位：磅）
    QString mDistDigitalFontFace = "Arial";                                                         // 距离数字(包括刻度和当前值)的字体类型
    quint8 mTargetSpeedFontSize = 16;                                                               // 目标速度的字体大小（单位：磅）
    QString mTargetSpeedFontFace = "Arial";                                                         // 目标速度的字体类型
    bool mTargetSpeedFontBold = true;                                                               // 设置目标速度字体加粗
};

#endif // DISTINFO_H
